/**
 * Created by seeker910 on 2017/6/29.
 * @description ListView 是以展示控件集合的组件。纯数据类型仅支持字符串集合展示
 * @description 在list基础上，增加dataSource类型支持Rsd.data.Store ,Rsd.data.Service,主要为BizListPage 和 BizListDialog提供组件
 * @description 可绑定服务端数据和本地数据源
 */
Rsd.define('Rsd.control.ListView', {
    extend: 'Rsd.control.List',
    requires: [
        'Rsd.data.Store',
        'Rsd.form.Text',
        'Rsd.form.ComboBox' 
    ],
    xtype:'list-view',
    cls: 'x-list-view',
    /**   
     * */ 
    constructor: function ListView(config) {
        config = config || {}; 
        this.apply(config); 
    },
    /**
     @public
     @description 加载dataSource到控件上；
     @description 1、dataSource 是数组对象,直接将数组元素作为config 传给item 控件
     @description 2、dataSource 是Rsd.data.Store，将查询返回的对象作为config.data的值 传给item 控件
     @description 3、dataSource 是Rsd.data.Service，将查询返回的对象作为config.data的值 传给item 控件
     * */
    loadData:function loadData(args,callback) {

        //this.log(this.dataSource);
        //数据源 为数组
        if(args instanceof Array)
        {
            //this.log('args is array',args);
            //listview对象load方法
            this.callParent(args,callback); 
            return;
        } 
        if(this.dataSource instanceof Array)
        { 
            //this.log('dataSource is array',this.dataSource);
            //listview对象load方法
            this.callParent(this.dataSource,callback); 
            return;
        }

        if(this.dataSource == null) 
        {
            //Rsd.log('dataSource value is null for Control ListView(id:' +this.id+ ').');
            Rsd.callFunction(this,callback,null);
            return;
        }
        var me = this;
        //debugger;
        //数据源 为Rsd.data.Store
        if(this.dataSource instanceof Rsd.data.Store) {

            var _args = Rsd.apply({}, args);

            this.dataSource.load(_args,function loadData(resp){
                //console.log(resp);
                if (resp != null) {
                    //Rsd.debug("Rsd.control.ListView.loadData()");
                    if(!resp.hasOwnProperty('success'))
                    {
                        console.error('返回数据格式不正确，未找到[success]属性。');
                    }
                    if (resp.success) {

                        var _data = resp.data; 
                        me.indexStart = _data.pagesize * _data.pageindex  + 1; 
                        var _rows = _data.rows||[];
                        me.callParentFn('loadData',[_rows.map(function (item){return {data:item};}),null]); 
                        
                        if(callback)
                        {
                            callback(resp);
                        }
                        
                    }
                    else
                    {
                        Rsd.alert('加载数据出现错误 ', resp.msg|| '未知错误');
                    }
                } 
                else
                {
                    Rsd.callFunction(me,callback,[resp]);
                }
            });
            
            return;
        }

        //数据源为 Rsd.data.Service
        if(this.dataSource instanceof Rsd.data.Service) {
            var _args = Rsd.apply({}, args);

            this.dataSource.request(_args,function loadData(resp){
                if (resp != null) {
                    //Rsd.debug("Rsd.control.ListView.loadData()");
                    
                    if(!resp.hasOwnProperty('success'))
                    {
                        throw new Error('返回数据格式不正确，未找到[success]属性。');
                    }
                    if (resp.success) {
                        var _data = resp.data||data;
                     
                        me.indexStart = _data.pagesize * _data.pageindex  + 1;
                      
                        var _rows = _data[me.dataSource.listName||'rows'];
                       
                        me.callParent(_rows.map(function(item){return {data:item};}),null);

                        if(callback)
                        {
                            callback(resp);
                        }
                    }
                    else
                    {
                        Rsd.alert('加载数据出现错误 ', resp.msg|| '未知错误');
                    }
                }
                else
                {
                    Rsd.callFunction(me,callback,[resp]);
                }
               
            });
            return;
        }
        
        Rsd.callFunction(me,callback,[this.dataSource]);

        Rsd.error('ListView属性dataSource不是有效值：' , this.dataSource);
    } 

});